/*
 * Copyright [2021-present] [ahoo wang <ahoowang@qq.com> (https://github.com/Ahoo-Wang)].
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *      http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package me.ahoo.cosky.discovery.spring.cloud.registry

import me.ahoo.cosky.discovery.ServiceInstanceContext
import org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationProperties

/**
 * CoSky Auto Service Registration.
 *
 * @author ahoo wang
 */
class CoSkyAutoServiceRegistration(
    serviceRegistry: CoSkyServiceRegistry,
    private val registration: CoSkyRegistration,
    private val autoServiceRegistrationProperties: AutoServiceRegistrationProperties
) : AbstractAutoServiceRegistration<CoSkyRegistration>(serviceRegistry, autoServiceRegistrationProperties) {

    override fun getConfiguration(): Any {
        return autoServiceRegistrationProperties
    }

    override fun isEnabled(): Boolean {
        return autoServiceRegistrationProperties.isEnabled
    }

    override fun getRegistration(): CoSkyRegistration {
        return registration
    }

    override fun getManagementRegistration(): CoSkyRegistration? {
        return null
    }

    override fun register() {
        if (registration.port == 0) {
            registration.port = port.get()
        }
        ServiceInstanceContext.serviceInstance = registration.asServiceInstance()
        super.register()
    }
}
